package com.sherry.dao.impl;

import com.sherry.dao.IFruitDao;
import com.sherry.model.Fruit;
import com.sherry.utils.DBManager;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

public class FruitDaoImpl implements IFruitDao {
    private Connection connection =null;
    private PreparedStatement psmt=null;
    private ResultSet rs=null;


//    获取水果列表
    @Override
    public List<Fruit> getFruitList(String fname, int offSize, int pageSize) {
        connection= DBManager.getConnByC3p0();

        String sql="";
        List<Fruit> fruitList=new ArrayList<>();  //多条数据
        Fruit fruit =null;  //单条数据
//        没有fname说明是查询所有水果数据，有fname说明是输入的分页查询

        try {
            //fname没有值
            if("".equals(fname)||fname==null){
                //表名爆红，一般是database里数据库没刷新，新建的表没被识别进来
                //已经实现了分页查询
                sql="select * from fruit limit ?,? ";
                psmt=connection.prepareStatement(sql);
//            prepareStatement需要放在try里,catch，不然会报红
                psmt.setInt(1,offSize);
                psmt.setInt(2,pageSize);

            }
            else {
//                也可以用concat字符串拼接来模糊查询
//              sql="select * from fruit where fname like concat('%'+?+'%') limit ?,? ";
                sql="select * from fruit where fname like ? limit ?,? ";
                psmt=connection.prepareStatement(sql);
                //fname模糊查询，%表示前后还能有其他文字
                fname="%"+fname+"%";
                psmt.setString(1,fname);
                psmt.setInt(2,offSize);
                psmt.setInt(3,pageSize);

            }
            rs=psmt.executeQuery();
//            返回的只有单条数据，可以用if,多条要用while循环返回的多条
//            处理数据，遍历列表数据（数据库）——》转为Java数据
            while (rs.next()){
                fruit=new Fruit();
                fruit.setId(rs.getInt("id"));
                fruit.setFname(rs.getString("fname"));
                fruit.setFprice(rs.getDouble("fprice"));
                fruit.setFstock(rs.getInt("fstock"));
                fruit.setFsite(rs.getString("fsite"));
//                多条数据的组装
                fruitList.add(fruit);
            }
            System.out.println(fruitList);
        }catch (SQLException e){
            e.printStackTrace();
        }

        return fruitList;
    }

    @Override
    public Integer getFruitCount(String fname) {
        String sql=null;
        Integer count=-1;  //记录总条数
        try {
            //fname没有值
            if("".equals(fname)||fname==null){
                sql="SELECT COUNT(1) FROM fruit";
                psmt = connection.prepareStatement(sql);
            }
            else {
                // 按 fname 模糊查询总数
                sql = "SELECT COUNT(1) FROM fruit WHERE fname LIKE ?";
                psmt = connection.prepareStatement(sql);
                fname = "%" + fname + "%";
                psmt.setString(1, fname);
            }
            rs=psmt.executeQuery();
            if (rs.next()) {
                count = rs.getInt(1);  // 获取总记录数
                System.out.println("总条数= "+count);
            }
        }catch (SQLException e){
            e.printStackTrace();
        }
        return count;
    }

    @Override
    public Integer delFruitById(Integer id) {
        String sql="delete from fruit where id=?";
        Object[] param=new Object[]{id};
        return DBManager.executeUpdate(sql,param);
    }

    @Override
    public Integer updateFruit(Fruit fruit) {
        String sql="update fruit set fname=?,fprice=?,fstock=?,fsite=? where id=?";
//        参数
        Object[] param=new Object[]{fruit.getFname(),fruit.getFprice(),fruit.getFstock(),fruit.getFsite(),fruit.getId()};
        return DBManager.executeUpdate(sql,param);
    }


//    @Override
//    public Integer getFruitListPage(String fname, int pageSize) {
//        Integer pageSum = 0;
//        connection= DBManager.getConnByC3p0();
//        String sql="";
//        try {
//            //fname没有值
//            if("".equals(fname)||fname==null){
//                sql="SELECT COUNT(*) FROM fruit";
//                psmt = connection.prepareStatement(sql);
//            }
//            else {
//                // 按 fname 模糊查询总数
//                sql = "SELECT COUNT(*) FROM fruit WHERE fname LIKE ?";
//                psmt = connection.prepareStatement(sql);
//                fname = "%" + fname + "%";
//                psmt.setString(1, fname);
//            }
//            rs=psmt.executeQuery();
//            if (rs.next()) {
//                pageSum = rs.getInt(1)/pageSize;  // 获取总记录数
//                System.out.println(pageSum);
//            }
//        }catch (SQLException e){
//            e.printStackTrace();
//        }
//        return pageSum;
//    }
}
